package cn.hy.机考.part02;

import java.util.Scanner;

/**
 * @author hy
 *
 *
 * 十一、员工工号问题
 * 工号系统由小写英文字母(a-z)和数字(0-9)两部分构成。
 * 新工号由一段英文 字母开头，之后跟随一段数字，比如"aaahw0001",“a12345”,“abcd1”,“a00” 注意新工号不能全为字母或者数字,允许数字部分有前导 0 或者全为 0。
 * 但是过长的工号会增加同事们的记忆成本，现在给出新工号至少需要分配的人数 X 和新工号中字母的长度 Y
 * 求新工号中数字的最短长度 Z。
 * 一行两个非负整数 X Y，数字用单个空格分隔
 *
 * 输出新工号中数字的最短长度 Z
 *
 * 260 1 # 1
 * 26 1 # 1
 * 2600 1 # 2
 */
public class Demo11 {
    public static final int LETTER_NUMBER = 26;
    public static final int DIGIT_NUMBER = 10;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String[] str = sc.nextLine().split("\\s");
            if (str.length == 2) {
                int people = Integer.parseInt(str[0]);
                int letter = Integer.parseInt(str[1]);
                int number = count(people, letter);
                System.out.println(number);
            }
        }
    }

    /**
     * 工号由字符和数字组成，英文字母一共有26个，数字字符一共有10个。
     * 根据题目要求，我们使用y 来表示字符的长度，每个位置上都可以使用26个字母中的任意一个，相互之间不影响，因此字符的可以表示的组合数是 26^y个。
     * 我们使用i来表示数字的长度，0-9 一共10个数字，可以使用全0 或者 前导0 数字部分是 10^i个
     * 组合起来一共可以表示的人数是26^y * 10^i个。
     *
     * 题目要求根据可以表示的人数，求最小的i。
     * @param people 人数
     * @param letter 字母的长度
     * @return
     */
    public static int count(int people, int letter) {
        //英文字母是26的次方，而数字的次方，只需要加到大于人数
        int i = 0;
        while ((Math.pow(LETTER_NUMBER, letter) * (Math.pow(DIGIT_NUMBER,
                i))) < people) {
            i++;
        }
        if (i == 0) {
            return 1;
        } else {
            return i;
        }
    }
}
